<template>
  <div class="component">
    <form>
      <div class="form-group">
        <textarea class="form-textarea"
          rows="14"
          placeholder="Bean字符串,如：private String name;"
          v-model="param"
        ></textarea>
      </div>
    </form>
  </div>
</template>

<script>
/* 导入Bean参数 */
import { Messager } from '@daelui/vdog/dist/components'

export default {
  data () {
    return {
      param: ''
    }
  },

  methods: {
    /**
     * @function 载入数据
    */
    load () {
      this.param = ''
    },
    /**
     * @function 获取状态
     * @return {Object}
    */
    getState () {
      /* 支持的格式 */
      // 1.多行
      // /**
      //  * desription
      //  * **/
      // private String name;

      // 2.单行
      // desription
      // private String name;

      // 3.单行
      // private String name; // desription

      let data = this.param.replace(/\n/g, '') // 输入的字符
      let params = [] // 参数对象
      let temp = ''
      // 多行注释匹配
      let reg1 = /\/\*+(\s|\*)*(.*?)(\*|\s)*\*+\/\s*private\s+([^;]+?)\s+([\w\\$]+)\s*=?\s*[^;]*;+?|\/\/\s*(.*?)\s+private\s+([^;]+?)\s+([\w\\$]+)\s*=?\s*[^;]*;+?|private\s+([^;]+?)\s+([\w\\$]+)\s*=?\s*[^;]*;+?\s+\/\/\s*([^\s]+)|private\s+([^;]+?)\s+([\w\\$]+)\s*=?\s*[^;]*;/ig
      while ((temp = reg1.exec(data)) !== null) {
        let name = ''
        let type = ''
        let desc = ''
        // 多行注释
        if (temp[5]) {
          name = temp[5]
          type = temp[4]
          desc = temp[2]
        }
        // 单行头部注释
        else if (temp[8]) {
          name = temp[8]
          type = temp[7]
          desc = temp[6]
        }
        // 单行尾部注释
        else if (temp[10]) {
          name = temp[10]
          type = temp[9]
          desc = temp[11]
        }
        // 无注释
        else if (temp[13]) {
          name = temp[13]
          type = temp[12]
          desc = ''
        }

        // 值处理
        this.resolve(params, name, type, desc)
      }

      if (params.length < 1) {
        Messager.warning('无法解析当前Bean')
      }
      return params.length > 0 ? params : ''
    },

    /**
     * @function 值解析
     * @param {Array} params
     * @param {String} name
     * @param {String} type
     * @param {String} desc
    */
    resolve (params, name, type, desc) {
      name = String(name).trim()
      type = String(type).trim()
      desc = String(desc).trim()
      if (name) {
        // 检测是否已经含有该字段
        let has = false
        params.forEach(item => {
          if (item.name === name) {
            has = true
          }
        })
        // 未含有
        if (!has) {
          // 常用类型 byte char short int long float double boolean <T> List Map
          // 字符
          if (/byte|char|string/i.test(type)) {
            type = 'string'
          }
          // 数字
          else if (/short|int|long|float|double/i.test(type)) {
            type = 'number'
          }
          // 布尔
          else if (/boolean/i.test(type)) {
            type = 'boolean'
          }
          // 数组
          else if (/list/i.test(type)) {
            type = 'array'
          }
          // 对象
          else {
            type = 'object'
          }
          params.push({
            name: name,
            type: type,
            desc: desc,
            required: 1,
            rule: '1',
            value: '',
            valid: 0,
            validRule: ''
          })
        }
      }
    }
  }
}
</script>

<style lang="less">

</style>
